rewrite_history_template = ChatPromptTemplate.from_template(
"""
# 角色
- 你是一个文献综述补写助手

# 背景
- 用户有一个需求，需要编写一份调研综述，你负责编写这份综述的基本原理与发展历程部分
- 这份综述已经编写了一部分基本原理与发展历程，但是你现在需要对这部分进行补写，引用更多论文
- 这篇综述的结构应该是引言->基本原理与发展历程->关键技术和衍生技术->实际应用举例->挑战与未来发展方向->总结与结论
- 你只需要负责补写基本原理与发展历程

# 基本原理与发展历程补写要求
- 首先需要详细介绍这个主题的核心概念的历史发展，从早期研究到现代技术演进，展示关键的里程碑、重要的论文或理论突破
- 当前已有的基本原理与发展历程部分论文引用数量不足
- 用户会再给你提供5篇有关于这个概念的历史发展的论文片段，你需要从中挑选你认为最贴近主题的论文来引用
- 在引用论文时，对论文内容进行总结和逻辑推理，不要直接使用原文，并且需要注意前后逻辑连贯性

# 用户需求
- {user_input}

# 已经写好的引言部分
- {history}

# 概念历史发展相关的论文片段
- {history_paper}

# 输出格式
- 输出markdown格式的一篇文献综述，包括正文以及参考文献列表两个部分，你返回的是续写后的完整文章，不要只返回你写的基本原理与发展历程部分
- 我已经提供了写好的部分综述，你只需要补写
- 在正文中，如果你引用了某篇论文，那么你需要在引用相关的语句后面用一个特定格式的字符串<sup>标号</sup>来表示，标号是一个整数数字，一篇综述的标号从1开始依次递增
- 在正文之后需要写一个参考文献列表，该列表的内容是这篇综述引用的所有文章，用从1开始的数字标号
- [参考文献列表]的格式是'citation_id': xxx, 'paper_id':xxx, 'paper_title':xxx, 'chunk_id': xxx
- [参考文献列表]的格式示例：
[参考文献列表]
'citation_id': 1, 'paper_id':'6516338d3fda6d7f065e50d0', 'paper_title':'Resisting Backdoor Attacks in Federated Learning Via Bidirectional Elections and Individual Perspective', 'chunk_id': 6
'citation_id': 2, 'paper_id':'655d674d939a5f4082e02457', 'paper_title':'MultiDelete for Multimodal Machine Unlearning', 'chunk_id': 5

开始任务！
"""
)


rewrite_tech_template = ChatPromptTemplate.from_template(
"""
# 角色
- 你是一个文献综述补写助手

# 背景
- 用户有一个需求，需要编写一份调研综述，你负责编写这份综述的关键技术和衍生技术部分
- 这份综述已经编写了一部分关键技术和衍生技术，但是你现在需要对这部分进行补写，引用更多论文
- 这篇综述的结构应该是引言->基本原理与发展历程->关键技术和衍生技术->实际应用举例->挑战与未来发展方向->总结与结论
- 你只需要负责补写关键技术和衍生技术

# 关键技术和衍生技术补写要求
- 首先需要详细介绍这个主题的关键技术，分模块介绍不同方法、技术、算法的特点，分析其适用范围
- 然后比较不同方法、技术或算法，分析优劣势以及如何根据具体问题选择合适的方法。
- 当前已有的关键技术和衍生技术部分论文引用数量不足
- 用户会再给你提供5篇有关于这个主题的关键技术和衍生技术的论文片段，你需要从中挑选你认为最贴近主题的论文来引用，你需要从中挑选你认为最贴近主题的论文来引用
- 在引用论文时，对论文内容进行总结和逻辑推理，不要直接使用原文，并且需要注意前后逻辑连贯性

# 用户需求
- {user_input}

# 已经写好的综述部分
- {tech}

# 关键技术和衍生技术相关的论文片段
- {tech_paper}

# 输出格式
- 输出markdown格式的一篇文献综述，包括正文以及参考文献列表两个部分，你返回的是续写后的完整文章，不要只返回你写的关键技术和衍生技术部分
- 我已经提供了写好的部分综述，你只需要补写
- 在正文中，如果你引用了某篇论文，那么你需要在引用相关的语句后面用一个特定格式的字符串<sup>标号</sup>来表示，标号是一个整数数字，一篇综述的标号从1开始依次递增
- 在正文之后需要写一个参考文献列表，该列表的内容是这篇综述引用的所有文章，用从1开始的数字标号
- [参考文献列表]的格式是'citation_id': xxx, 'paper_id':xxx, 'paper_title':xxx, 'chunk_id': xxx
- [参考文献列表]的格式示例：
[参考文献列表]
'citation_id': 1, 'paper_id':'6516338d3fda6d7f065e50d0', 'paper_title':'Resisting Backdoor Attacks in Federated Learning Via Bidirectional Elections and Individual Perspective', 'chunk_id': 6
'citation_id': 2, 'paper_id':'655d674d939a5f4082e02457', 'paper_title':'MultiDelete for Multimodal Machine Unlearning', 'chunk_id': 5

开始任务！
"""
)


rewrite_app_template = ChatPromptTemplate.from_template(
"""
# 角色
- 你是一个文献综述补写助手

# 背景
- 用户有一个需求，需要编写一份调研综述，你负责编写这份综述的实际应用举例部分
- 这份综述已经编写了一部分实际应用举例，但是你现在需要对这部分进行补写，引用更多论文
- 这篇综述的结构应该是引言->基本原理与发展历程->关键技术和衍生技术->实际应用举例->挑战与未来发展方向->总结与结论
- 你只需要负责补写实际应用举例

# 实际应用举例补写要求
- 需要列举实际应用中的例子，展示这些方法如何被广泛应用于不同的领域
- 当前已有的实际应用举例部分论文引用数量不足
- 用户会再给你提供5篇有关于这个主题的实际应用举例的论文片段，你需要从中挑选你认为最贴近主题的论文来引用，你需要从中挑选你认为最贴近主题的论文来引用
- 在引用论文时，对论文内容进行总结和逻辑推理，不要直接使用原文，并且需要注意前后逻辑连贯性

# 用户需求
- {user_input}

# 已经写好的综述部分
- {tech}

# 实际应用举例相关的论文片段
- {app_paper}

# 输出格式
- 输出markdown格式的一篇文献综述，包括正文以及参考文献列表两个部分，你返回的是续写后的完整文章，不要只返回你写的实际应用举例
- 我已经提供了写好的部分综述，你只需要补写
- 在正文中，如果你引用了某篇论文，那么你需要在引用相关的语句后面用一个特定格式的字符串<sup>标号</sup>来表示，标号是一个整数数字，一篇综述的标号从1开始依次递增
- 在正文之后需要写一个参考文献列表，该列表的内容是这篇综述引用的所有文章，用从1开始的数字标号
- [参考文献列表]的格式是'citation_id': xxx, 'paper_id':xxx, 'paper_title':xxx, 'chunk_id': xxx
- [参考文献列表]的格式示例：
[参考文献列表]
'citation_id': 1, 'paper_id':'6516338d3fda6d7f065e50d0', 'paper_title':'Resisting Backdoor Attacks in Federated Learning Via Bidirectional Elections and Individual Perspective', 'chunk_id': 6
'citation_id': 2, 'paper_id':'655d674d939a5f4082e02457', 'paper_title':'MultiDelete for Multimodal Machine Unlearning', 'chunk_id': 5

开始任务！
"""
)


rewrite_future_template = ChatPromptTemplate.from_template(
"""
# 角色
- 你是一个文献综述补写助手

# 背景
- 用户有一个需求，需要编写一份调研综述，你负责编写这份综述的挑战与未来发展部分
- 这份综述已经编写了一部分实际应用举例，但是你现在需要对这部分进行补写，引用更多论文
- 这篇综述的结构应该是引言->基本原理与发展历程->关键技术和衍生技术->实际应用举例->挑战与未来发展方向->总结与结论
- 你只需要负责补写挑战与未来发展

# 挑战与未来发展补写要求
- 探讨当前技术面临的主要挑战和问题
- 根据现有趋势，提出对该领域未来发展的预测
- 当前已有的挑战与未来发展部分论文引用数量不足
- 用户会再给你提供5篇有关于这个主题的挑战与未来发展的论文片段，你需要从中挑选你认为最贴近主题的论文来引用，你需要从中挑选你认为最贴近主题的论文来引用
- 在引用论文时，对论文内容进行总结和逻辑推理，不要直接使用原文，并且需要注意前后逻辑连贯性

# 用户需求
- {user_input}

# 已经写好的综述部分
- {app}

# 挑战与未来发展相关的论文片段
- {future_paper}

# 输出格式
- 输出markdown格式的一篇文献综述，包括正文以及参考文献列表两个部分，你返回的是续写后的完整文章，不要只返回你写的挑战与未来发展
- 我已经提供了写好的部分综述，你只需要补写
- 在正文中，如果你引用了某篇论文，那么你需要在引用相关的语句后面用一个特定格式的字符串<sup>标号</sup>来表示，标号是一个整数数字，一篇综述的标号从1开始依次递增
- 在正文之后需要写一个参考文献列表，该列表的内容是这篇综述引用的所有文章，用从1开始的数字标号
- [参考文献列表]的格式是'citation_id': xxx, 'paper_id':xxx, 'paper_title':xxx, 'chunk_id': xxx
- [参考文献列表]的格式示例：
[参考文献列表]
'citation_id': 1, 'paper_id':'6516338d3fda6d7f065e50d0', 'paper_title':'Resisting Backdoor Attacks in Federated Learning Via Bidirectional Elections and Individual Perspective', 'chunk_id': 6
'citation_id': 2, 'paper_id':'655d674d939a5f4082e02457', 'paper_title':'MultiDelete for Multimodal Machine Unlearning', 'chunk_id': 5

开始任务！
"""
)

# def rewrite_history(state):
#     #先拿到引用论文
#     theme = state['theme']
#     history_paper = get_paper("history of "+theme, 10)[5:]
#     user_input = state['user_input']
#     history = state['history']
#     check_llm = check_template | llm | StrOutputParser()
#     finish = "1"
#     c = 0
#     while finish:
#     #执行基本原理与发展历程编写
#         rewrite_history_llm = rewrite_history_template | llm | StrOutputParser()
#         history = rewrite_history_llm.invoke(
#             {'user_input': user_input,
#              'history': history,
#              'history_paper': history_paper}
#         )
#         finish = check_llm.invoke(
#             {'aim': '基本原理与发展历程',
#              'article': history}
#         )
#         if finish[0] == "0":
#             break
#         print(finish)
#         c+=1
#         print("基本原理与发展历程++", c)
#     return {'history': history}

# def rewrite_tech(state):
#     #先拿到引用论文
#     theme = state['theme']
#     tech_paper = get_paper("related work of "+theme, 10)[5:]
#     user_input = state['user_input']
#     tech = state['tech']
#     check_llm = check_template | llm | StrOutputParser()
#     finish = "1"
#     c = 0
#     while finish:
#     #执行关键技术和衍生技术编写
#         rewrite_tech_llm = rewrite_tech_template | llm | StrOutputParser()
#         tech = rewrite_tech_llm.invoke(
#             {'user_input': user_input,
#              'tech': tech,
#              'tech_paper': tech_paper}
#         )
#         finish = check_llm.invoke(
#             {'aim': '关键技术和衍生技术',
#              'article': tech}
#         )
#         if finish[0] == "0":
#             break
#         print(finish)
#         c+=1
#         print("关键技术和衍生技术++", c)
#     return {'tech': tech}

# def rewrite_app(state):
#     #先拿到引用论文
#     theme = state['theme']
#     app_paper = get_paper("application of "+theme, 10)[5:]
#     user_input = state['user_input']
#     app = state['app']
#     #执行实际应用举例
#     check_llm = check_template | llm | StrOutputParser()
#     finish = "1"
#     while finish:
#         rewrite_app_llm = rewrite_app_template | llm | StrOutputParser()
#         app = rewrite_app_llm.invoke(
#             {'user_input': user_input,
#              'app': app,
#              'app_paper': app_paper}
#         )
#         finish = check_llm.invoke(
#             {'aim': '实际应用举例',
#              'article': app}
#         )
#         if finish[0] == "0":
#             break
#         print(finish)
#     return {'app': app}
# thb


# def rewrite_future(state):
#     #先拿到引用论文
#     theme = state['theme']
#     future_paper = get_paper("future work of "+theme, 10)[5:]
#     user_input = state['user_input']
#     future = state['future']
#     #执行挑战与未来发展方向
#     check_llm = check_template | llm | StrOutputParser()
#     finish = "1"
#     while finish:
#         rewrite_future_llm = rewrite_future_template | llm | StrOutputParser()
#         future = rewrite_future_llm.invoke(
#             {'user_input': user_input,
#              'future': future,
#              'future_paper': future_paper}
#         )
#         finish = check_llm.invoke(
#             {'aim': '挑战与未来发展方向',
#              'article': future}
#         )
#         if finish[0] == "0":
#             break
#         print(finish)
#     return {'future': future}


plan_aim_template = ChatPromptTemplate.from_template(
"""
# 角色
你是一个擅长编写文献综述的AI助手

# 定义
- 文献综述：是对某一领域,某一专业或某一方面的课题、问题或研究专题搜集大量相关资料,然后通过分析、归纳、整理当前课题、问题或研究专题的最新进展、学术见解或建议,对其做出综合性介绍和阐述的一种学术论文.
- [参考文献列表]：该列表的内容是这篇综述引用的所有文章,用从1开始的数字标号,写在文献综述的最后

# 任务
- 你会收到一个文献综述的编写指令,你需要判断这个指令属于哪一种文献综述的编写指令
- 你会收到关于这种文献综述的总体框架设计要求,你必须严格遵守这个设计要求来编写综述
- 你会收到关于这个文献综述主题的论文引用内容,你需要选择最贴近主题的内容来引用并且做出综合性介绍和阐述


# 目标
- 编写一篇综合性、专业性、逻辑性强的文献综述

# 输出格式
- 你的输出以markdown的形式输出
- 在文中的引用,你需要在引用相关的语句后面用一个特定格式的字符串<sup>标号</sup>来表示,标号是一个整数数字,一篇综述的标号从1开始依次递增
- [参考文献列表]的格式是'citation_id': xxx, 'paper_id':xxx, 'paper_title':xxx, 'chunk_id': xxx
- [参考文献列表]的格式示例：
[参考文献列表]
'citation_id': 1, 'paper_id':'6516338d3fda6d7f065e50d0', 'paper_title':'Resisting Backdoor Attacks in Federated Learning Via Bidirectional Elections and Individual Perspective', 'chunk_id': 6
'citation_id': 2, 'paper_id':'655d674d939a5f4082e02457', 'paper_title':'MultiDelete for Multimodal Machine Unlearning', 'chunk_id': 5

开始任务!
"""
)
